#ifndef BINDSFMLSYSTEM_HPP
#define BINDSFMLSYSTEM_HPP

// std-Header
#include <string>

// SFML
#include <SFML/System.hpp>
#include <SFML/Window.hpp>
#include <SFML/Graphics.hpp>

// Eigene Header
#include "../Lua.hpp"
#include "Static.hpp"

namespace bind
{
	namespace SFML
	{
		namespace system
		{
			void Bind(lua_State* lua, const std::string& ns);
			//void Config(lua_State* lua);				
			void BClock(lua_State* lua, const std::string& ns);
			void BContext(lua_State* lua, const std::string& ns);
			void BLock(lua_State* lua, const std::string& ns);
			void BMutex(lua_State* lua, const std::string& ns);
			void BNonCopyable(lua_State* lua, const std::string& ns);
			void BRandomizer(lua_State* lua, const std::string& ns);
			void BSleep(lua_State* lua, const std::string& ns);
			void BThread(lua_State* lua, const std::string& ns);
			template<class T, typename A> void BThread(lua_State* lua, const std::string& ns);
			void BThreadLocal(lua_State* lua, const std::string& ns);
			template<typename T> void BThreadLocalPtr(lua_State* lua, const std::string& ns);
			template<typename T> void BUtf(lua_State* lua, const std::string& ns);
			void BResource(lua_State* lua, const std::string& ns);
			template<typename T> void BVector2(lua_State* lua, const std::string& ns, const std::string& name);
			template<typename T> void BVector3(lua_State* lua, const std::string& ns, const std::string& name);
			void BMatrix3(lua_State* lua, const std::string& ns);
			template<typename T> void BRect(lua_State* lua, const std::string& ns, const std::string& name);
			void BListener(lua_State* lua, const std::string& ns);
		}
	}
}

#endif //BINDSFMLSYSTEM_HPP